package demo.huodongbaoming.config;

import feign.Logger;
import feign.Request;
import feign.Retryer;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.TimeUnit;

/**
 * OpenFeign配置类
 * 配置Feign客户端的超时、重试、日志等参数
 */
@Configuration
public class FeignConfig {
    
    /**
     * 配置Feign客户端的日志级别
     * NONE: 不记录日志
     * BASIC: 只记录请求方法、URL、响应状态码及执行时间
     * HEADERS: 记录BASIC级别的基础上，记录请求和响应的header
     * FULL: 记录请求和响应的header、body和元数据
     */
    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
    
    /**
     * 配置Feign客户端的超时时间
     * connectTimeout: 连接超时时间
     * readTimeout: 读取超时时间
     */
    @Bean
    Request.Options feignOptions() {
        return new Request.Options(
            5, TimeUnit.SECONDS,  // 连接超时时间
            10, TimeUnit.SECONDS, // 读取超时时间
            true                 // 是否跟随重定向
        );
    }
    
    /**
     * 配置Feign客户端的重试策略
     * period: 重试间隔时间
     * maxPeriod: 最大重试间隔时间
     * maxAttempts: 最大重试次数
     */
    @Bean
    Retryer feignRetryer() {
        // 重试间隔为100ms，最大重试间隔为1s，最多重试3次
        return new Retryer.Default(100, TimeUnit.SECONDS.toMillis(1), 3);
    }
} 